/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.rm.beans;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.rm.entidades.Jugadores;
import org.rm.entidades.jpa.JugadoresJpaController;
import org.rm.entidades.jpa.exceptions.NonexistentEntityException;

/**
 * Clase para gestionar los jugadores
 * @author ffbeltran
 */
public class ControladorJugadores extends ControladorEspecifico {

    private Jugadores jugador = new Jugadores();

    /**
     * Método para modificar un jugador. Debe recibir un parámetro 'id' que
     * indica el identificador del usuario que va a modificarse.
     * Llama al método {@link FormularioBean#getJugador(java.lang.Integer) }
     * a través de la instancia {@code form} y a continuación llama a
     * {@link JugadoresJpaController#edit(org.rm.entidades.Jugadores) } con el
     * objeto {@link Jugadores} devuelto
     * @return la cadena 'jugadores'
     */
    public String modificaJugador() {
        Integer id = Integer.valueOf(ControladorUtil.getParam("id"));
        Jugadores jug = form.getJugador(id);
        if (jug != null) {
            try {
                JugadoresJpaController.edit(jug);
            } catch (NonexistentEntityException ex) {
                ex.printStackTrace();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        return "jugadores";
    }

    /**
     * Método para crear un nuevo jugador. Puesto que el usuario ha utilizado el
     * objeto {@code jugador} puesto por esta clase, simplemente llamamos a
     * {@link JugadoresJpaController#create(org.rm.entidades.Jugadores) } con
     * dicha instancia. A continuación actualiza el mapa de jugadores de {@code form}
     * @return la cadena 'jugadores'
     * @see FormularioBean#getMapaJugadores() 
     */
    public String nuevoJugador() {
        jugador.setId(null);
        JugadoresJpaController.create(jugador);
        jugador = new Jugadores();
        form.getMapaJugadores().put(jugador.getId(), jugador);
        return "jugadores";
    }

    /**
     * Método para eliminar un jugador. Debe recibir un parámetro 'id' que
     * indica el identificador del usuario que va a modificarse. A continuación
     * llama a {@link JugadoresJpaController#destroy(java.lang.Integer) } con
     * el valor del parámetro y actualiza el mapa de jugadores de {@code form}
     * @return la cadena 'jugadores'
     * @see FormularioBean#getMapaJugadores()
     */
    public String eliminaJugador() {
        String id = ControladorUtil.getParam("id");
        try {
            JugadoresJpaController.destroy(Integer.valueOf(id));
            form.getMapaJugadores().remove(id);
        } catch (NonexistentEntityException ex) {
            ex.printStackTrace();
        }
        return "jugadores";
    }

    /**
     * Devuelve la lista de jugadores disponible a través del mapa de jugadores
     * de {@code form}
     * @return lista de jugadores en la sesión
     * @see FormularioBean#getMapaJugadores()
     */
    public List<Jugadores> getJugadores() {
        List<Jugadores> listaJugadores = new ArrayList<Jugadores>();
        Map<Integer, Jugadores> jugadores = form.getMapaJugadores();
        for (Integer idJugador : jugadores.keySet()) {
            listaJugadores.add(jugadores.get(idJugador));
        }
        return listaJugadores;
    }

    /**
     * Devuelve una instancia de {@link Jugadores} para que el usuario pueda
     * rellenarla con datos y crear nuevos jugadores.
     * @return jugador
     */
    public Jugadores getJugador() {
        return jugador;
    }

    /**
     * Método setter para la instancia {@code jugador}
     * @param jugador
     * @see #getJugador() 
     */
    public void setJugador(Jugadores jugador) {
        this.jugador = jugador;
    }
}
